/*
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

/*
 *
 *
 *
 *
 *
 * Written by Doug Lea with assistance from members of JCP JSR-166
 * Expert Group and released to the public domain, as explained at
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

package java.util.concurrent.locks;

/**
 * A synchronizer that may be exclusively owned by a thread. This class provides
 * a basis for creating locks and related synchronizers that may entail a notion
 * of ownership. The <tt>AbstractOwnableSynchronizer</tt> class itself does not
 * manage or use this information. However, subclasses and tools may use
 * appropriately maintained values to help control and monitor access and
 * provide diagnostics.
 * 
 * @since 1.6
 * @author Doug Lea
 */
public abstract class AbstractOwnableSynchronizer implements java.io.Serializable {

	/** Use serial ID even though all fields transient. */
	private static final long serialVersionUID = 3737899427754241961L;

	/**
	 * Empty constructor for use by subclasses.
	 */
	protected AbstractOwnableSynchronizer() {
	}

	/**
	 * The current owner of exclusive mode synchronization.
	 * <p>
	 * 保存当前拥有排他访问权的线程。
	 */
	private transient Thread exclusiveOwnerThread;

	/**
	 * Sets the thread that currently owns exclusive access. A <tt>null</tt>
	 * argument indicates that no thread owns access. This method does not
	 * otherwise impose any synchronization or <tt>volatile</tt> field accesses.
	 */
	protected final void setExclusiveOwnerThread(Thread t) {
		exclusiveOwnerThread = t;
	}

	/**
	 * Returns the thread last set by <tt>setExclusiveOwnerThread</tt>, or
	 * <tt>null</tt> if never set. This method does not otherwise impose any
	 * synchronization or <tt>volatile</tt> field accesses.
	 * 
	 * @return the owner thread
	 */
	protected final Thread getExclusiveOwnerThread() {
		return exclusiveOwnerThread;
	}
}
